package com.goods.business.service;

import com.goods.common.vo.business.*;
import com.goods.common.vo.system.PageVO;

import java.util.List;

public interface BusinessService {
    /**
     * 加载分类数据
     *
     * @param pageNum  页数, 当前是第几页
     * @param pageSize 每页记录数
     * @return
     */
    PageVO<ProductCategoryTreeNodeVO> categoryTree(Integer pageNum, Integer pageSize);

    /**
     * 加载父级分类数据
     *
     * @return
     */
    List<ProductCategoryTreeNodeVO> getParentCategoryTree();

    /**
     * 添加分类
     *
     * @param productCategoryVO
     */
    void add(ProductCategoryVO productCategoryVO);

    /**
     * 编辑
     *
     * @param id
     * @return
     */
    ProductCategoryVO edit(Long id);

    /**
     * 修改
     *
     * @param id
     * @param productCategoryVO
     */
    void update(Long id, ProductCategoryVO productCategoryVO);

    /**
     * 删除分类：如果有子类的话，一起删除
     *
     * @param id
     */
    void delete(Long id);

    /**
     * 带条件查询的物资来源分页列表展示
     *
     * @param pageNum
     * @param pageSize
     * @param supplierVO
     * @return
     */
    PageVO<SupplierVO> findSupplierList(Integer pageNum, Integer pageSize, SupplierVO supplierVO);

    /**
     * 添加物资来源
     *
     * @param supplierVO
     */
    void supplierAdd(SupplierVO supplierVO);

    /**
     * 编辑物资来源
     *
     * @param id
     * @return
     */
    SupplierVO supplierEdit(Long id);

    /**
     * 更新用户物资来源
     *
     * @param id
     * @param supplierVO
     */
    void supplierUpdate(Long id, SupplierVO supplierVO);

    /**
     * 删除来源
     *
     * @param id
     */
    void supplierDelete(Long id);

    /**
     * 加载物资列表
     *
     * @param pageNum
     * @param pageSize
     * @param name
     * @param categoryId
     * @param supplier
     * @param status
     * @return
     */
    PageVO<ProductVO> findProductList(Integer pageNum, Integer pageSize, String name, Long categoryId, String supplier, Integer status);

    /**
     * 添加物资
     *
     * @param productVO
     */
    void productAdd(ProductVO productVO);

    /**
     * 编辑物资
     *
     * @param id
     * @return
     */
    ProductVO productEdit(Long id);

    /**
     * 更新物资
     *
     * @param id
     * @param productVO
     */
    void productUpdate(Long id, ProductVO productVO);

    /**
     * 移除回收站
     *
     * @param id
     */
    void productRemove(Long id);

    /**
     * 从回收站恢复
     *
     * @param id
     */
    void productBack(Long id);

    /**
     * 删除物资
     *
     * @param id
     */
    void productDelete(Long id);

    /**
     * 物资添加审核
     *
     * @param id
     */
    void productPublish(Long id);

    /**
     * 入库单（入库记录）数据分页列表展示
     *
     * @param pageNum
     * @param pageSize
     * @param inStockVO
     * @return
     */
    PageVO<InStockVO> findInStockList(Integer pageNum, Integer pageSize, InStockVO inStockVO);

    /**
     * 查看入库单明细
     *
     * @param id
     * @param pageNum
     * @return
     */
    InStockDetailVO inStockDetail(Long id, Integer pageNum);

    /**
     * 移除回收站
     *
     * @param id
     */
    void inStockRemove(Long id);

    /**
     * 从回收站恢复
     *
     * @param id
     */
    void inStockBack(Long id);

    /**
     * 物资入库审核
     *
     * @param id
     */
    void inStockPublish(Long id);

    /**
     * 删除明细
     *
     * @param id
     */
    void inStockDelete(Long id);

    /**
     * 加载来源数据
     *
     * @return
     */
    List<SupplierVO> findAll();

    /**
     * 加载商品列表(可入库)
     *
     * @param pageNum
     * @param pageSize
     * @param categorys
     * @return
     */
    PageVO<ProductVO> findProducts(Integer pageNum, Integer pageSize, String categorys);

    /**
     * 添加入库单
     *
     * @param inStockVO
     */
    void addIntoStock(InStockVO inStockVO);

    /**
     * 加载库存信息
     *
     * @param pageNum
     * @param pageSize
     * @param name
     * @param categorys
     * @return
     */
    PageVO<ProductStockVO> findProductStocks(Integer pageNum, Integer pageSize, String name, String categorys);

    /**
     * 物资所有的库存信息
     *
     * @param name
     * @param categorys
     * @return
     */
    List<ProductStockVO> findAllStocks(String name, String categorys);

    /**
     * 加载物资去处列表
     *
     * @param pageNum
     * @param pageSize
     * @param address
     * @param contact
     * @param name
     * @return
     */
    PageVO<ConsumerVO> findConsumerList(Integer pageNum, Integer pageSize, String address, String contact, String name);

    /**
     * 添加物资去处
     *
     * @param consumerVO
     */
    void consumerAdd(ConsumerVO consumerVO);

    /**
     * 编辑物资去处
     *
     * @param id
     * @return
     */
    ConsumerVO consumerEdit(Long id);

    /**
     * 修改物资去处
     *
     * @param id
     * @param consumerVO
     */
    void consumerUpdate(Long id, ConsumerVO consumerVO);

    /**
     * 删除物资去处
     *
     * @param id
     */
    void consumerDelete(Long id);

    /**
     * 出库单（发放记录）数据分页列表展示
     *
     * @param pageNum
     * @param pageSize
     * @param outNum
     * @param type
     * @param status
     * @return
     */
    PageVO<OutStockVO> findOutStockList(Integer pageNum, Integer pageSize, String outNum, Integer type, Integer status);

    /**
     * 查看发放单明细
     *
     * @param pageNum
     * @param id
     * @return
     */
    OutStockDetailVO outStockDetail(Integer pageNum, Long id);

    /**
     * 移除回收站
     *
     * @param id
     */
    void outStockRemove(Long id);

    /**
     * 从回收站恢复
     *
     * @param id
     */
    void outStockBack(Long id);

    /**
     * 删除明细
     *
     * @param id
     */
    void outStockDelete(Long id);

    /**
     * 物资发放审核
     *
     * @param id
     */
    void outStockPublish(Long id);

    /**
     * 加载去向数据
     *
     * @return
     */
    List<ConsumerVO> consumerFindAll();

    /**
     * 创建发放单
     *
     * @param outStockVO
     */
    void addOutStock(OutStockVO outStockVO);

    /**
     * 今日是否已签到
     *
     * @return
     */
    HealthVO isReport();

    /**
     * 打卡
     *
     * @param healthVO
     */
    void report(HealthVO healthVO);

    /**
     * //打卡历史记录
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageVO<HealthVO> history(Integer pageNum, Integer pageSize);

}
